//
//  StatusCell.swift
//  SynWeibo
//
//  Created by 沈艳男 on 15/9/9.
//  Copyright © 2015年 沈艳男. All rights reserved.


import UIKit

// 微博头像高度
let StatusIconWidth: CGFloat = 35
// 控件之间的间隙
let StatusCellMargin: CGFloat = 12
/// 默认的图片大小
let StatusPictureItemWidth: CGFloat = 90
/// 默认图盘的间距
let StatusPictureItemMargin: CGFloat = 10
/// 每行图片的最大数量
let StatusPictureMaxCount: CGFloat = 3
/// 配图视图的最大尺寸
let StatusPictureMaxWidth = StatusPictureMaxCount * StatusPictureItemWidth + (StatusPictureMaxCount - 1) * StatusPictureItemMargin

class StatusCell: UITableViewCell {

    // MARK: 懒加载控件
    // 1、顶部视图
    private lazy var topView: StatusCellTopView = StatusCellTopView()
    // 2、文字标签
    lazy var contentLabel: UILabel = UILabel(title: nil, color: UIColor.darkGrayColor(), fontSize: 15, layoutWidth: UIScreen.mainScreen().bounds.width - 2 * StatusCellMargin)
    /// 3、配图
    lazy var pictureView: StatusPictureView = StatusPictureView()
    // 4、底部视图
    lazy var bottomView: StatusCellBottomView = StatusCellBottomView()
    
    /// 微博的数据视图模型
    var statusViewModel: StatusViewModel? {
        // didSet 的作用是模型数值被设置之后，发生的反应
        didSet {
            // 模型数值被设置之后，马上要产生的连锁反应 - 界面UI发生变化
            topView.statusViewModel = statusViewModel
            contentLabel.text = statusViewModel?.status.text
            
            // 设置配图试图的内部的图片(sizeToFit),计算出试图的大小
            pictureView.statusViewModel = statusViewModel
            
            // 设置配图试图的大小
            pictureViewHeightCons?.constant = pictureView.bounds.width
            pictureViewWidthCons?.constant = pictureView.bounds.height
            
            // 如果没有配图,就让让顶部约束为0，否则为StatusPictureItemMargin
            pictureViewTopCons?.constant = statusViewModel?.thumbnailURLs?.count == 0 ? 0 : StatusPictureItemMargin
            
        }
    }
    
    
    
    // 约束配图的宽度
    var pictureViewWidthCons: NSLayoutConstraint?
    // 约束配图的高度
    var pictureViewHeightCons: NSLayoutConstraint?
    // 顶部视图的约束
    var pictureViewTopCons : NSLayoutConstraint?
    
    
    /// 计算指定试图模型的行高
    func rowHeight(viewModel: StatusViewModel) -> CGFloat {
        // 1、设置视图模型，会调用模型的didSet方法
        statusViewModel = viewModel
        // 2、有了内容以后更新操作
        layoutIfNeeded()
        // 3、返回底部视图的最大高度
        return CGRectGetMaxY(bottomView.frame)
    }

    
    // MARK: - 搭建界面
    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)
        
        setUI()
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    // MARK: - 设置控件属性
    func setUI() {
        
        // 顶部分割试图
        let topSepView = UIView()
        topSepView.backgroundColor = UIColor(white: 0.85, alpha: 1.0)
        
        // 1、添加控件
        contentView.addSubview(topView)
        contentView.addSubview(topSepView)
        contentView.addSubview(contentLabel)
        contentView.addSubview(pictureView)
        contentView.addSubview(bottomView)
        
        // 2、设置布局
        // cell 的默认大小是 320/44，iPhone 4时代的遗留问题，宽度不能直接使用cell的宽度
        let width = UIScreen.mainScreen().bounds.width
        // 1、顶部分割线
        topSepView.ff_AlignInner(type: ff_AlignType.TopLeft, referView: contentView, size: CGSize(width: width, height: 10))
        
        // 2、顶部试图的高度
        topView.ff_AlignInner(type: ff_AlignType.TopLeft, referView: contentView, size: CGSize(width: width, height: StatusIconWidth + StatusCellMargin), offset: CGPoint(x: 0, y: 10))
        
        // 3、文本
        contentLabel.ff_AlignVertical(type: ff_AlignType.BottomLeft, referView: topView, size: nil, offset: CGPoint(x: StatusCellMargin, y: StatusCellMargin))
        
        
//        // 4、配图布局
//        let cons = pictureView.ff_AlignVertical(type: ff_AlignType.BottomLeft, referView: contentLabel, size: CGSize(width: StatusPictureMaxWidth, height: StatusPictureMaxWidth), offset: CGPoint(x: 0, y: StatusPictureItemMargin))
//        
//
//        // 记录配图试图的约束
//        // 从自动布局返回的数组中取出配图的高度
//        pictureViewWidthCons = pictureView.ff_Constraint(cons, attribute: NSLayoutAttribute.Width)
//        pictureViewHeightCons = pictureView.ff_Constraint(cons, attribute: NSLayoutAttribute.Height)
//        pictureViewTopCons = pictureView.ff_Constraint(cons, attribute: NSLayoutAttribute.Top)
        
        // 5、底部按钮
        bottomView.ff_AlignVertical(type: ff_AlignType.BottomLeft, referView: pictureView, size: CGSize(width: width, height: 44), offset: CGPoint(x: -StatusCellMargin, y: StatusCellMargin))
        
    }
    
}
